1. The Field of the Invention
The present invention generally relates to reliable messaging systems. More particularly, the present invention provides a single programming model with reliable assurances and features that can be configured and tailored to the specific requirements of an application or of particular installations of the application.
2. Background and Relevant Art
Messaging systems have become an increasingly popular way to communicate. These communication systems range from e-mail systems to secured transactions, from chat rooms to various web services such as Internet shopping. Each of these communication systems requires varying degrees of security, reliability, scalability and availability. These requirements range from loosely-coupled models such as datagram mechanisms with simple fire and forget reliability and queuing systems that provide transacted durable messaging, to tightly-coupled models using protocols such as Transmission Control Protocol (TCP) and Remote Procedure Call (RPC) with session-oriented communication.
Because of the varying requirements for various communication mechanisms, such as those specifically identified above, program models differ among each of these mechanisms, and even amongst similar systems from different vendors. Further, the degree of configuration flexibility in each program model varies across the different mechanisms and implementations. Programmers and system designers typically must understand each mechanism; decide which one best fits their requirements, and write code to the specific interface defined by that mechanism.
If product or deployment requirements change, however, and a different communication mechanism is required, the resulting code usually must be redesigned and reimplemented. This is due to the fact that most reliable communication mechanisms do not provide sufficient flexibility with respect to or control over the selection of reliability assurances and features they provide to the applications using them. For example, such mechanisms commonly provide only exactly-once in-order delivery. There are, however, many situations where this is more than an application really needs.
There is also cost incurred in providing more or higher assurances, such as exactly-once in-order delivery. For example, acknowledgement messages must be sent from the receiver back to the sender to acknowledge receipt of messages. Without this acknowledgement, the sender cannot know whether the message was or was not received, and hence cannot provide the exactly-once assurance. Applications that can live with the occasional loss of messages may not want to incur the cost of an at-least-once acknowledgement protocol, and risk a session failure if a single low-priority message couldn't be delivered. Requiring acknowledgment in such cases can unnecessarily increase communication costs and decrease application availability.
Accordingly, there exists a need for a single programming model, which provides a reliable messaging infrastructure where the message delivery assurances and features to be provided to the application are configurable. Further, there is a need for a single reliable messaging programming model that supports a wide range of session state and messaging storage facilities for various transport implementations and for various assurances and features.